iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
SideProject30

拿到一支Garmin錶,要怎麼開發app?系列 第 10

[Day-10] Monkey C的那些規則-4

  • 分享至 

  • xImage
  •  

上週六補班,只有一天假日真是難熬
不過接下來有三天假/images/emoticon/emoticon07.gif

今天來看Monkey C的繼承

在Monkey C也有繼承,跟java一樣,使用關鍵字extend
子類繼承了母類之後,
就算子類沒有實作母類的function,
在新建的子類物件也可以直接使用母類的function(不可使用母類的成員變數)
不過不是所有function都會被繼承,
在java,繼承母類的子類不會實作母類的建構子
而在Monkey C ,子類一樣不會實作母類的initialize()
因此,子類如果要使用母類的initialize()則需要先定義一個自己的initialize()
再從自己的initialize()裡面呼叫母類的initialize()來實作,
如下方範例中,calss Sphere的initialize()裡面,又再呼叫了母類Circle.initialize()

此外,由於Monkey C沒有super的用法,
所以沒辦法像java一樣直接用super的寫法去呼叫母類的function,
不過可以透過母類名.function名去呼叫,
如下方範例,
子類Sphere裡面的describe()方法是以Circle.describe()的寫法去呼叫母類Circle的describe()
就程式碼的易讀性而言我會更喜歡Monkey C的做法

using Toybox.Math as Math;
using Toybox.System as System;

class Circle {
    var mRadius;
    function initialize(aRadius) {
        mRadius = aRadius;
    }

    function getCircumference() {
        return 2 * Math.PI * Math.pow(self.mRadius, 2);   // 2*PI*r
    }

    function getArea() {
        return Math.PI * Math.pow(self.mRadius, 2);     // PI*r^2
    }

    function describe() {
        System.println("Circle!");
    }
}

class Sphere extends Circle {
    function initialize(aRadius) {
        Circle.initialize(aRadius);
    }
    function getArea() {
        return 4 * Math.PI * Math.pow(self.mRadius, 2);  // 4*PI*r^2
    }

    function describe() {
        System.print("I'm a Sphere! My parent is a ");
        Circle.describe();
    }
}

上一篇
[Day-09] Monkey C的那些規則-3
下一篇
[Day-11] Monkey C的那些規則-5-modifier
系列文
拿到一支Garmin錶,要怎麼開發app?30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言